
********************************
■■■■
■ ■ ■ ■
■ ■■■ ■■■
■ ■ ■ ■
■■■■
〜基礎から ★ C++Programing〜
********************************
【注意】 このマガジンは、最大化してお読みください。
また、等角フォントでお読みください。
(MS ゴシックなど)
********************************
発行者 むーくん
マガジンNO. 24(2−7)
発行日 2000/12/11
講読人数 2000名ぐらい
マガジンID 0000050494
このマガジンは、まぐまぐから配信されています。
********************************
★あいさつ★
クリスマスネタ。
自分を表した言葉。
あわてんぼうのサンタクロース♪・・・
ああ・・・精密な頭脳がほしい!!よく間違えて済みません・・・
********************************
★目次★
・訂正
・解答例
・思わぬ落とし穴
・型キャスト
・予告
********************************
★訂正★
また失礼しました。重大です。
「たくさんのオペランドがあったら(1)」
の所で、「20+5+10+1」は、「20+5+5+1」の間違いです。
問題を差し替えたら後ろがずれてました。
混乱された方、ごめんなさい!!
まず、「20+5」が評価されます。
これは、「25」になりますよね。
すると式は、こうなります。 a = 25+5+1;
今度は、「25+5」が評価されます。
「30」になります。
最後に、「30+1」が評価され、最終的に「31」となります。
つまり、式は、「a = (((20+5)+5)+1);」
と同じになります。
********************************
★解答例★
必要部分だけ書いた方は、それで構いません。
(1)底辺が3cm、高さが8cmの三角形の面積。
#include<iostream.h>
int main(void){
double l, h, s;
l = 3;
h = 8;
s = l * h / 2;
cout << "面積は、" << s << "cm^2です。" << endl;
return 0;
}
(2)半径2cmの円の円周の長さ。
#include<iostream.h>
int main(void){
double r, pi, l;
r = 2;
pi = 3.1415926535;
l = 2 * pi * r;
cout << "円周の長さは、" << l << "cm^2です。" << endl;
return 0;
}
(3)国語47点、数学34点、英語84点、社会72点、理科100点。
点数の合計と、平均値。
#include<iostream.h>
int main(void){
int japanese, math, english, society, science;
double average;
japanese = 47;
math = 34;
english = 84;
society = 72;
science = 100;
average = (japanese + math + english + society + science) / 5.0;
cout << "平均点は、" << average << "点です。" << endl;
return 0;
}
注:最後から3行目で、「/ 5.0」となっています。
「/ 5」だとどうなるか、試してみてください。
(4)21 % 8 はいくつになりますか。
21÷8=2余り5
よって、5になります。
********************************
★思わぬ落とし穴★
上の(3)の注にも書いてありますが、「5.0」と「5」の違いは
何でしょう。
実は、定数にも、型があるのです。
「5.0」は、小数点以下があるので、「浮動小数点」、
「5」は、「整数」として扱われます。
何に影響するのでしょうか?
実は、演算結果の型というのは、オペランドの中で、一番精度が高い
ものが使われます。
要するに、「整数・整数」の演算結果は「整数」、
「整数・浮動小数点」の演算結果は、「浮動小数点」になります。
(3)の話では、つまりこういうことです。
japanese, math, english, society, scienceという5つの変数は、「整数」
です。
この5つの演算結果は、「整数」となります。
これを割るオペランド(つまり「5」や、「5.0」)が、
「整数」ならば、結果は「整数」に、
「浮動小数点」ならば、結果は「浮動小数点」になります。
「整数」では、小数点以下が切り捨てられてしまいます。
実際の計算では、この切り捨てによって、バグが潜む可能性がでてくる
ので、十分に注意しましょう。
********************************
★型キャスト★
標準では、上のように自動的に精度の高い方に合わされますが、
無理矢理自分で変えることもできます。
その方法が、「型キャスト」です。
これは、コンパイラへの型のごまかしで、多用すべきではありません。
でも、C++では、よく使われる手法なので、紹介しておきます。
例:(3)は、以下のように書くこともできます。
average = (double)(japanese + math + english + society + science) / 5;
点数の合計を、浮動小数点にキャストしています。
average = (japanese + math + english + society + science) / (double)5;
「5」を、浮動小数点にキャストしています。
average = ((double)japanese + math + english + society + science) / 5;
「japanese」を、浮動小数点にキャストしています。
どれでもOKです。なぜなら、どれか一つでも、浮動小数点にキャスト
されれば、あとは自動型変換が効くからです。
キャストは、キャストしたいオペランドの前に、括弧付きの型名を
書けばいいです。
左辺値は、キャストできないので注意してください。
********************************
★用語説明★
定数
変えることのできない値のこと。
例えば、変数は、中身を変えることができます。
でも、「20」は、「20」以外の何者でもありませんよね。
左辺値
代入式の左の値のこと。
基本的に、変数しか置くことができません。
********************************
★予告★
コメントについて
********************************
講読解除はこちら
http://members.tripod.co.jp/mukun_mmg/mmg/cpp.html
バックナンバーはこちら
http://members.tripod.co.jp/mukun_mmg/mmg/cpp.html
内容について質問やご意見など
smukun@hotmail.com
筆者のWebサイト(むーくんの理学的なんでも講座)
http://members.tripod.co.jp/mukun_mmg/
************************************